package java学习.实训.day04;

/**
 * **************
 * 项目名称: 蓝桥杯 <br/>
 * 文件名称:  <br/>
 * 文件描述: 这里添加您的类文件描述，说明当前文件要包含的功能。 <br/>
 * 文件创建：刘世锦 <br/>
 * 创建时间: 2022/6/11 <br/>
 *
 * @version v1.0 <br/>
 * @update [序号][日期YYYY-MM-DD][更改人姓名][变更描述]<br/>
 * *************
 */
/*
1.（继承练习）需求：通过继承设计物理英雄类(ADHero)和魔法英雄类(APHero).
        物理英雄和魔法英雄都有名称(name),攻击力(ap), 血量(hp), 防御力(armor),
        移动速度(moveSpeed).物理英雄能进行 物理攻击(physicAttack), 魔法英雄可以进行魔法攻击(magicAttack).
2.（面试题）访问修饰符 public,private,protected,以及不写（默认）时的区别？---文字描述
    private : 仅在本类可访问
    缺省 : 本包下可以访问
    protected : 本包及其子类可以访问
    public : 所有类都能访问

3.（面试题）重载（Overload）和重写（Override）的区别。重载的方法能否根据返回类型进行区分？---文字描述
    重载：发送在一个类中，方法名相同，参数列表不同， 返回值和修饰符无关
    重写：发生在父类与子类(即 重写 )之间，（两同两小一大原则）
        方法名和参数列表相同，
        返回类型和抛出异常小于等于父类，
        修饰符 大于等于父类
    不能
4. 实例变量和局部变量有什么区别？--文字描述
    局部变量的作用域在方法内，必须初始化。
        方法结束时，局部变量也销毁
         不可被修饰符修饰
    实例变量作用于类，
        有默认值，
        类结束时，实例变量也销毁
         可被修饰符修饰

5.一个”.java”源文件中是否可以包含多个类（不是内部类）？有什么限制？--文字描述
    可以有多个类，只能有一个public类

6.预习 多态，final，static，abstract，代码块。
 */
public class HomeW {
    public static void main(String[] args) {
        new ADHero("战士",20,100,50,60).physicAttack();
        new APHero("法师",40,60,30,60).magicAttack();
    }
}
class Hero{
    private String name;
    private int ap;
    private int hp;
    private int armor;
    private int moveSpeed;

    public Hero(String name, int ap, int hp, int armor, int moveSpeed) {
        this.name = name;
        this.ap = ap;
        this.hp = hp;
        this.armor = armor;
        this.moveSpeed = moveSpeed;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAp() {
        return ap;
    }

    public void setAp(int ap) {
        this.ap = ap;
    }

    public int getHp() {
        return hp;
    }

    public void setHp(int hp) {
        this.hp = hp;
    }

    public int getArmor() {
        return armor;
    }

    public void setArmor(int armor) {
        this.armor = armor;
    }

    public int getMoveSpeed() {
        return moveSpeed;
    }

    public void setMoveSpeed(int moveSpeed) {
        this.moveSpeed = moveSpeed;
    }

    @Override
    public String toString() {
        return "Hero{" +
                "name='" + name + '\'' +
                ", ap=" + ap +
                ", hp=" + hp +
                ", armor=" + armor +
                ", moveSpeed=" + moveSpeed +
                '}';
    }
}

class ADHero extends Hero{

    public ADHero(String name, int ap, int hp, int armor, int moveSpeed) {
        super(name, ap, hp, armor, moveSpeed);
    }
    public void physicAttack(){
        System.out.println(    "name='" + this.getName()+"物理攻击:"+this.getAp());
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

class APHero extends Hero{

    public APHero(String name, int ap, int hp, int armor, int moveSpeed) {
        super(name, ap, hp, armor, moveSpeed);
    }
    public void magicAttack(){
        System.out.println(    "name='" + this.getName()+"法术攻击:"+this.getAp());
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
